﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Gerencial_Fisio_Nutry.Tela
{
    public partial class Produto : Form
    {

        public Produto()
        {
            InitializeComponent();
            carregarLista();
        }
        public void carregarLista()
        {
            dgVPessoas.DataSource = new Banco.MetodoBanco().todosProdutos();


            dgVPessoas.Columns[0].HeaderText = "Codigo";
            dgVPessoas.Columns[1].HeaderText = "Referencia";
            dgVPessoas.Columns[2].HeaderText = "Descrição";
            dgVPessoas.Columns[3].HeaderText = "Segmento";
            dgVPessoas.Columns[4].HeaderText = "Preço";
            dgVPessoas.Columns[5].HeaderText = "Unidade";
            dgVPessoas.Columns[6].HeaderText = "CFOP";
            dgVPessoas.Columns[7].HeaderText = "NCM";
            dgVPessoas.Columns[0].Width = 83;
            dgVPessoas.Columns[1].Width = 85;
            dgVPessoas.Columns[2].Width = 240;
            dgVPessoas.Columns[3].Width = 80;
            dgVPessoas.Columns[4].Width = 80;
            dgVPessoas.Columns[5].Width = 60;
            dgVPessoas.Columns[6].Width = 80; 
            dgVPessoas.Columns[7].Width = 80;

        }
        public void moduloNovoProduto()
        {
            limparTela();
            pGeral.Enabled = true;
            //alguns itens não ficam ativos
            tbCodigo.Enabled = false;
            tbEstoque.Enabled = false;
            tbSegmento.DataSource = new Banco.MetodoBanco().todosSegmentos();
            tbDesconto.Enabled = true;
            tbDescricao.Enabled = true;
            tbIndicador.Enabled = true;
            tbReferencia.Enabled = true;
            tbSegmento.Enabled = true; tbPreco.Enabled = true;
            isExcluir = false;
            isNovo = true;
            isAlterar = false;
            tbCFOP.Enabled = true;
            tbNCM.Enabled = true;
            gbFrag.Visible = false;
            cbDescompactar.Visible = true;
            btEstoque.Enabled = false;
            btEstoque.Visible = false;
        }
        bool isAlterar ;
        bool isNovo;
        public void moduloEstoque()
        {

            limparTelaEstoque();
            pGeral.Enabled = false;
            pGeral.Visible = false;
            pEstoque.Visible = true;
            pEstoque.Enabled = true;

            //alguns itens não ficam ativos
            tbECodigo.Enabled = false;
            tbEReferencia.Enabled = false;
            tbEDescricao.Enabled = false;
            tbEDesconto.Enabled = false;
            tbEValorVenda.Enabled = false;
            tbEQtdAtual.Enabled = false;

            
            isExcluir = false;
            isNovo = false;
            isAlterar = false;
          
        }
        public void carregarProduto()
        {
           

        }
        public void moduloExcluirProduto()
        {

            pGeral.Enabled = true;
            //alguns itens não ficam ativos
            tbCodigo.Enabled = false;
            tbEstoque.Enabled = false;
            tbSegmento.Enabled = false;
            tbCFOP.Enabled = false;
            tbNCM.Enabled = false;

            gbFrag.Visible = false;
            cbDescompactar.Visible = false;
            tbSegmento.Enabled = false;
            tbDesconto.Enabled = false;
            tbDescricao.Enabled = false;
            tbIndicador.Enabled = false;
            tbReferencia.Enabled = false;
            tbPreco.Enabled = false;
            isExcluir = true; isNovo = false; isAlterar = false;

            btEstoque.Enabled = true;
            btEstoque.Visible = true;
        }
        bool isExcluir;
        public void moduloAlterarProduto()
        {
            isExcluir = false; isNovo = false; isAlterar = true;

            pGeral.Enabled = true;
            //alguns itens não ficam ativos
            tbCodigo.Enabled = false;
            tbEstoque.Enabled = false;
            tbSegmento.DataSource = new Banco.MetodoBanco().todosSegmentos();
            tbDesconto.Enabled = true;
            tbDescricao.Enabled = true;
            tbIndicador.Enabled = true;
            tbReferencia.Enabled = true;
            tbSegmento.Enabled = true; tbPreco.Enabled = true;
            tbCFOP.Enabled = false;
            tbNCM.Enabled = false;
            btEstoque.Enabled = true;
            btEstoque.Visible = true;

            gbFrag.Visible = false;
            cbDescompactar.Visible = false;

        }
        private void pBTEstoque_Click(object sender, EventArgs e)
        {
            moduloEstoque();
        }
        private void pbNovo_Click(object sender, EventArgs e)
        {
            moduloNovoProduto(); bCadSeg.Visible = true;
            pEstoque.Visible = false;
            pGeral.Visible = true;

        }
        private void pAlterar_Click(object sender, EventArgs e)
        {
            moduloAlterarProduto(); bCadSeg.Visible = true;
            pEstoque.Visible = false;
            pGeral.Visible = true;
        }
        private void pExluir_Click(object sender, EventArgs e)
        {
            moduloExcluirProduto(); bCadSeg.Visible = false;
            pEstoque.Visible = false;
            pGeral.Visible = true;
        }
        private void pAcao_Click(object sender, EventArgs e)
        {
            try
            {
                if (isExcluir && MessageBox.Show("Deseja EXCLUIR este Produto?", "Confirme sua Opcao", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    new Banco.MetodoBanco().desativarProduto(int.Parse(tbCodigo.Text)); limparTela();
                    carregarLista(); return;
                }
                if (isNovo && MessageBox.Show("Inserir Novo Produto?", "Confirme sua Opcao", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    if (new Banco.MetodoBanco().isProdutoDesativado(tbReferencia.Text))
                    {
                        int codis = new Banco.MetodoBanco().cod_segmentoByDescricao(tbSegmento.SelectedValue.ToString());
                        new Banco.MetodoBanco().ativarProduto
                            (tbReferencia.Text,tbDescricao.Text, double.Parse( tbPreco.Text.Replace('.',',')),tbIndicador.Text
                            , codis, double.Parse(tbDesconto.Text.Replace('.', ','))/100 );

                        MessageBox.Show("Produto Reativado, Referencia informada já existente\n Estoque Reativado para este produto" );
                    }
                    else {
                        int codis = new Banco.MetodoBanco().cod_segmentoByDescricao(tbSegmento.SelectedValue.ToString());

                        if(!cbDescompactar.Checked)
                        {
                           
                            new Banco.MetodoBanco().cadastrarProduto(Convert.ToInt32(tbCodigo.Text),   tbReferencia.Text, tbDescricao.Text
                                , double.Parse(tbPreco.Text.Replace('.', ',')), tbIndicador.Text
                           , codis, double.Parse(tbDesconto.Text.Replace('.', ',')) / 100, int.Parse( tbCFOP.Text),(tbNCM.Text),int.Parse(tbCodigo.Text));} 
                        else{

                            //depois do cadastro
                            if (double.Parse(tbQuantidade.Text.Replace('.', ',')) > new Banco.MetodoBanco().estoqueDoProduto(int.Parse(tb_original.Text)))
                            {
                                MessageBox.Show("Estoque do Item a ser fracionado é  : " + new Banco.MetodoBanco().estoqueDoProduto(int.Parse(tb_original.Text)));
                                return;
                            }
                            int codNovoProduto = new Banco.MetodoBanco().getNovoCodProdutoByOld(int.Parse(tb_original.Text));

                            new Banco.MetodoBanco().cadastrarProdutoByPacote(codNovoProduto, tbReferencia.Text, tbDescricao.Text, double.Parse(tbPreco.Text.Replace('.', ',')), tbIndicador.Text
                           , codis, double.Parse(tbDesconto.Text.Replace('.', ',')) / 100,
                           int.Parse( tbCFOP.Text),(tbNCM.Text),int.Parse(tb_original.Text),double.Parse(tbPeso.Text.Replace('.', ',')));
                       
                            
                            //aqui --  pega a quantidade e chama um metodo de baixa
                            new Banco.MetodoBanco().AbastecerNovoByQuanditadeOriginal(codNovoProduto, double.Parse(tbQuantidade.Text.Replace('.', ',')), int.Parse(tb_original.Text));

                        }
                        
                    //cadastrar
                    }
                    limparTela();
                    carregarLista();
                    
                    return;
                }
                if (isAlterar && MessageBox.Show("Alterar Este Produto?", "Confirme sua Opcao", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    int codis = new Banco.MetodoBanco().cod_segmentoByDescricao(tbSegmento.SelectedValue.ToString());
                    new Banco.MetodoBanco().ativarProduto
                        (tbReferencia.Text, tbDescricao.Text, double.Parse(tbPreco.Text.Replace('.', ',')), tbIndicador.Text
                        , codis, double.Parse(tbDesconto.Text.Replace('.', ','))/100);

                    limparTela();
                    carregarLista(); return;
                }

            }
            catch { }
        }
        public void limparTela()
        {
            tbCodigo.Text = "";
            tbEstoque.Text = "";
            tbCFOP.Text = "";
            tbNCM.Text = "";
            tbEstoque.Text = "";
            tbPreco.Text = "";
            tbDesconto.Text = "";
            tbDescricao.Text = "";
            tbIndicador.Text = "";
            tbReferencia.Text = "";
            pGeral.Enabled = false;
            //alguns itens não ficam ativos
            tbCodigo.Enabled = false;
            tbEstoque.Enabled = false;
           
 
            tbSegmento.Enabled = false;

            tbDesconto.Enabled = false;
            tbDescricao.Enabled = false;
            tbIndicador.Enabled = false;
            tbReferencia.Enabled = false;
            pGeral.Enabled = false;
        }
        private void btEConfirmar_Click(object sender, EventArgs e)
        {
            //inserir Estoque no Item
       

        }
        public void limparTelaEstoque()
        {

            tbEQuantidade.Text = "";
            tbEValidade.Text = "";
            tbEValorCompra.Text = "";
        }
        public void carregarTela(int cod_produto)
        {
            Logica.Produto prod = new Banco.MetodoBanco().carregarProdutoByCodigo(cod_produto);
            prod.quantidadeAtualEstoque = new Banco.MetodoBanco().estoqueDoProduto(cod_produto);


            pGeral.Enabled = false;
            //alguns itens não ficam ativos
            tbCodigo.Enabled = false;
            tbEstoque.Enabled = false;
            string[] teste = { new Banco.MetodoBanco().carregaSegmento(cod_produto)};
            tbSegmento.DataSource = teste;
            tbSegmento.Enabled = false;
 
            tbDesconto.Enabled = false;
            tbDescricao.Enabled = false;
            tbIndicador.Enabled = false;
            tbReferencia.Enabled = false;

            tbCodigo.Text = prod.cod_Produto.ToString("00000");
            tbEstoque.Text = prod.quantidadeAtualEstoque.ToString();
           
            tbPreco .Text = prod.precoSaida.ToString("0.00");
            tbDesconto.Text =  (prod.descontoLimite*100)+"";
            tbDescricao.Text = prod.descricao;
            tbIndicador.Text = prod.unidade;
            tbReferencia.Text = prod.referencia;
            tbCFOP.Text = prod.CFOP.ToString();
            tbNCM.Text = prod.NCM;


            tbECodigo.Text = tbCodigo.Text;
            tbEReferencia.Text = tbReferencia.Text;
            tbEDescricao.Text = tbDescricao.Text;
            tbEDesconto.Text = tbDesconto.Text;
            tbEValorVenda.Text = tbPreco.Text;
            tbEQtdAtual.Text = tbEstoque.Text;

        }
        private void dgVPessoas_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                carregarTela(int.Parse(dgVPessoas.Rows[e.RowIndex].Cells[0].Value.ToString()));
            }
            catch
            {
            }
        }

        private void bCadSeg_Click(object sender, EventArgs e)
        {
            new CadSegmento().ShowDialog();
            limparTela();
            carregarLista(); return;
        }

        private void btEstoque_Click(object sender, EventArgs e)
        {
            Estoque estoque = new Estoque( int.Parse( tbCodigo.Text));
            estoque.ShowDialog();
        }

        private void removerTodosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Estoque estoque = new Estoque(int.Parse(tbCodigo.Text));
            estoque.ShowDialog();

        }
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            new Banco.MetodoBanco().atualizaReferencia(int.Parse(tbCodigo.Text), tbReferencia.Text);
            limparTela();
            carregarLista(); return;
        }
        private void cbDescompactar_CheckedChanged(object sender, EventArgs e)
        {
            if (cbDescompactar.Checked) gbFrag.Visible = true;
            else gbFrag.Visible = false;
            tb_original.Text = "";
            tbPeso.Text = "";
            tbQuantidade.Text = "";
        }

        private void btConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                if (DateTime.Parse(tbEValidade.Text).Equals(null))
                    return;
                if (double.Parse(tbEValorCompra.Text) <= 0) return;

                if (double.Parse(tbEQuantidade.Text) <= 0) return;
            }
            catch { return; }
            new Banco.MetodoBanco().insereEstoqueItem(1, int.Parse(tbECodigo.Text), double.Parse(tbEQuantidade.Text),
           double.Parse(tbEValorCompra.Text), tbEValidade.Text);
            limparTela(); limparTelaEstoque();
            carregarLista(); return;
        }

        

        

        



    }
}
